use std::path::Prefix::Verbatim;

// 函数参数：接收不可变引用
fn read_data(data: &Vec<i32>) {
    println!("数组长度：{}", data.len());
    // 此时，参数是不可变的
    // 如果修改会报错
    // data.push(3);
}

// 函数参数：接收可变引用
// 用 mut 显式的声明函数参数是可变的
fn modify_data(data: &mut Vec<i32>) {
    println!("数组长度：{}", data.len());
    // 此时，参数是可变的
    // 如果修改不会报错
    data.push(3);
}

// 获取所有权，需要显式的返回参数
fn take_ownership(mut data:Vec<i32>) -> Vec<i32>{
    // 修改
    data.push(100);
    // 返回
    // 只需要写需要返回的变量名就行，不需要加分号
    data
}

fn main() {
    // 定义向量
    let mut numbers = vec![1,2,3];

    // 不可变
    read_data(&numbers);

    // 可变，传递参数必须用 mut 显式声明
    modify_data(&mut numbers);

    println!("修改之前：{:?}", numbers);

    // 转移所有权
    numbers = take_ownership(numbers);
    println!("修改之后：{:?}", numbers)
}
